//
//  UITextView+Emoticon.swift
//  61.新工程表情键盘
//
//  Created by apple on 16/3/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

extension UITextView {
    
    /// 将textView上面的表情转成表情名称,拼接成字符串
    func emoticonText() -> String {
        var strM: String = ""
        // textView.attributedText里面的内容是分段保存的,一个附件是一段
        // enumerationRange: 范围
        // usingBlock: 每遍历到一段内容就会调用usingBlock一次
        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (result, range, _) -> Void in
            // 不是附件就截取对应的内容
            let str: String
            if let attachment = result["NSAttachment"] as? CZTextAttachment {
                // 需要获取表情的名称
                str = attachment.chs!
            } else {
                // 截取对应的内容
                str = (self.attributedText.string as NSString).substringWithRange(range)
            }
            strM += str
        }
        
        return strM
    }
    
    /**
     添加表情模型的信息到textView上面
     
     - parameter emotion: 表情模型
     */
    func insertEmoticon(emotion: CZEmoticonModel) {
        
        // 添加emoji表情到textView
        if let emoji = emotion.emoji {
            insertText(emoji)
        }
        
        // 有图片添加图片到textView
        if let  pngPath = emotion.pngPath {
//            // textView要添加图片,1.需要将图片转成附件, 2.并转成属性文本 3.设置给textView的attributedText
//            // 创建附件
//            let attachment = CZTextAttachment()
//            attachment.chs = emotion.chs
//            
//            // 给附件设置图片
//            attachment.image = UIImage(named: pngPath)
//            
//            let wh = font!.lineHeight
//            
//            // 设置附件大小
//            // bounds.y 和 frame.y正好相反
//            attachment.bounds = CGRect(x: 0, y: -4, width: wh, height: wh)
//            
//            // 将附件转成属性文本
//            let attrString = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))
//            
//            // 给附件添加font属性
//            attrString.addAttribute(NSFontAttributeName, value: font!, range: NSRange(location: 0, length: 1))
            
            // 获取到当前属性的文本
            let attrM = NSMutableAttributedString(attributedString: attributedText)
            
            // 获取当前textView选中的范围
            let range = selectedRange
            
            // 将附件属性文本添加到现有属性文本
            attrM.replaceCharactersInRange(range, withAttributedString: emotion.emoticonModelToAttrString(font!))
            
            // 将属性文本赋值给textView的attributedText
            attributedText = attrM
            
            // 重新设置光标的位置在原来光标后面
            selectedRange = NSRange(location: range.location + 1, length: 0)
            
            // 不会触发textViewDidChanged事件
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self)
            
            delegate?.textViewDidChange?(self)
        }
    }
}
